<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    /* 
    1. 使用
    await 表达式  
      prmose表达式左侧加wait
      表达式一般都是一个promise值
      await的结果值是promise成功的value
      如果await右侧不是promise, 直接返回这个值  => 相当于没有await
    async 函数
      await表达式所在的函数定义左侧
      返回值是promise对象, 它的结果值由sync函数体执行的结果决定
    try...catch
      用来得到promise失败的结果
    */

    function f() {
      return new Promise((resolve, reject)=> {
        // resolve(1)
        reject(2)
      })
    }

    async function fn() {
      try {
        const value = await f() 
        console.log(value)
      } catch (error) {
        console.log(error)
      }
    }

    // async & await & try...catch的本质代码
    function fn2() {
      return f().then( 
        value => { // 所有await后面的代码都是在成功回调中执行的
          console.log(value)
        },
        error => { // 所有catch中的代码都是在失败回调中调用 
          console.log(error)
        }
      )
    }

   
    async function test() {
      fn().then(
        value => {
          console.log('test', value)
        },
        error => {
          console.log('test', error)
        }
      )

      const a = await 3 
      console.log(a)
    }

    test()
  </script>
</body>
</html>